Queues are used as a method of communicating between software entities. One or more producers add items to a queue that is managed by a server, and one or more consumers remove items from the queue. The server provides asynchronous operation for producers and consumers, such that a producer is not required to wait for a consumer to finish accessing the queue, and vice versa. The queue read operation uses polling, such that a consumer checks to see if any data is available before removal.
In scenarios involving many consumers, significant server resources are used to handle the polls. Significant consumer resources are also used in competing with each other for access to the queue. This can lead to an imbalance between consumers, such that some consumers get an increased and disproportionate access to the queue while other consumers receive inadequate access.